#include "sig_sim.h"
#include "syn_tri.h"

void sig_sim_ini(void)
{
//使用BOOT0做pps输出，PB8-TIM4-CH3
	GPIO_Set(GPIOB,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	GPIO_AF_Set(GPIOB,8,2);

	RCC->APB1ENR1|=RCC_APB1ENR1_TIM4EN;
	TIM4->CR1 = 0x0080 | (0<<5); //不分频，边沿PWM
	TIM4->CR2 = 0; //
	TIM4->SMCR = 0; //
	TIM4->DIER = 0;	     //
	TIM4->CCMR1=0;		
	TIM4->CCMR2=0x0068; //通道3输出PWM
	TIM4->CCER=0x0100;		//通道输出允许，
	TIM4->PSC=16000-1;		//160MHz 10KHz
	TIM4->ARR=1000;	//自动装载寄存器，频率10Hz
	TIM4->CCR3=100;		//通道3输出
	TIM4->EGR=1;		//UG置一

//由于DAC不好引出，使用定时器TIM3-CH1(PA6)出12750Hz方波
	GPIO_Set(GPIOA,PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_HIGH,GPIO_PUPD_PU);
	GPIO_AF_Set(GPIOA,6,2);

	RCC->APB1ENR1|=RCC_APB1ENR1_TIM3EN;
	TIM3->CR1 = 0x0080 | (0<<5); //不分频，边沿PWM
	TIM3->CR2 = 0; //
	TIM3->SMCR = 0; //
	TIM3->DIER = 0;	     //
	TIM3->CCMR1=0x0068;	 //通道1输出PWM
	TIM3->CCMR2=0x00;
	TIM3->CCER=0x0001;		//通道输出允许
	TIM3->PSC=0;		//160MHz 10KHz
	TIM3->ARR=12549-1;	//自动装载寄存器，频率12750Hz
	TIM3->CCR1=TIM3->ARR/2;		//通道1输出占空比50%
	TIM3->EGR=1;		//UG置一
}

void sig_gen_sin(s16 *p, s16 A, float fre, float fs, int N) //生成正弦信号，输入频率和采样频率
{
	u32 i=0;
	float dt = 1/fs; //采样间隔时间，单位秒
	float tf = (2*3.1415926f) * fre; //时间系数
	for(i=0; i<N; i++) //生成N个点
	{
		float ph = tf*i*dt;
		p[i] = A*sin(ph);
	}
}
void sig_gen_lfm(s16 *p, int N, S_SIG_LFM_PARA &para) //生成线性调频
{
	u32 i=0;
	float dt = 1/para.fs; //采样间隔时间，单位秒
	float ph = 0; //当前相位
	for(i=0; i<N; i++) //生成N个点
	{
		float fre = para.f_st + dt*i*para.df_dt; //当前频率
		float tf = (2*3.1415926f) * fre; //时间系数
		ph += tf*dt;
		p[i] = A*cos(ph);
	}
}

